
% 分类函数

function type = Classify(roots_poly)
    real_parts = real(roots_poly);      % 取特征根的实部
    imag_parts = imag(roots_poly);      % 取特征根的虚部
    
    is_real = (abs(imag_parts) < 1e-8); % 判断哪些根是实数根（虚部接近0）
    real_roots = roots_poly(is_real);   % 实数根集合
    complex_roots = roots_poly(~is_real); % 复数根集合（虚部不为0）
    
    pos_real_real = sum(real(real_roots) > 1e-6);  % 统计正实根的个数（实根且实部大于0）
    neg_real_real = sum(real(real_roots) < -1e-6); % 统计负实根的个数（实根且实部小于0）
    
    % 统计正实部的复数根对数（虚部正，实部大于0），每个复数对包含两个共轭根，这里只算一半
    pos_real_complex = sum((real(complex_roots) > 1e-6));
    
    % 统计负实部的复数根对数（虚部正，实部小于0）
    neg_real_complex = sum((real(complex_roots) < -1e-6));
    if isempty(complex_roots)
        if pos_real_real == 2 && neg_real_real == 1
            type = 'USP (2P1N)';
        elseif pos_real_real == 1 && neg_real_real == 2
            type = 'USP (1P2N)';
        else
            % 其他情况
            type = 'Other';
        end
    else
        if pos_real_real == 1 && neg_real_complex == 2
            type = 'USF (1P2N)';
        elseif pos_real_complex == 2 && neg_real_real == 1
            type = 'USF (2P1N)';
        elseif neg_real_real == 1 && neg_real_complex == 2
            type = 'SNF (0P3N)';
        else
            type = 'Other';
        end
    end
end